package org.ala.tcp_feign_common.serialize.kryo;

import org.ala.tcp_feign_common.enums.TcpFeignSerializableTypeEnums;
import org.ala.tcp_feign_common.exceptions.SerializableException;
import org.ala.tcp_feign_common.serialize.ISerializabler;


/**
 * kryo 序列化 / 反序列化工具
 * 
 * @author 骆毅(ala)
 * @date 2024年4月21日
 */
public class KryoSerializabler implements ISerializabler {
	
	
	/**
	 * kryo池子
	 */
	protected KryoPools pool;
	public KryoSerializabler() {
		pool = new KryoPools();
		pool.init(Runtime.getRuntime().availableProcessors() * 2, Runtime.getRuntime().availableProcessors() * 8);
	}
	

	@Override
	public TcpFeignSerializableTypeEnums type() {
		return TcpFeignSerializableTypeEnums.KRYO;
	}

	@Override
	public byte[] serialize(Object body) throws SerializableException {
		try {
			return pool.serialize(body);
		} catch (Exception e) {
			throw new SerializableException(e);
		}
	}

	@Override
	public <T> T deSerialize(byte[] bytes, Class<T> clazz) throws SerializableException {
		try {
			return pool.deserialize(bytes, clazz);
		} catch (Exception e) {
			throw new SerializableException(e);
		}
	}

}
